June 13, 2020
By: Kevin
外部Clojure学习外部材料梳理-2023-06-14版本
大多数需要科学上网.
这些资源(文章、书籍和视频)在开始学习 Clojure 语言或学习语言的特定部分时非常有用。
- 🔴 强制(适用于初学者和中级学习者)
- 🟩 针对初学者
- 🟨 针对中级学习者
了解这门语言
使用这些资源快速了解语言。比 Hello World 深入,比一本书浅。
- 🔴 Clojure 从零开始:这是 Aphyr 对该语言的绝佳介绍。跟随你的编辑器和 REPL 设置,写下每一行代码。按照自己的节奏探索。完成整个课程最多需要几天时间,非常适合快速掌握基础知识。
- 🟩 Rich 向 Java 和 Lisp 程序员介绍/演示该语言。这是对语言的权威介绍。Rich 本人花了很多时间教授编程, 是一个很好的课程来跟进学习。随着你的 REPL,暂停视频尝试不同的东西。
- 🟩 在几分钟内学习 Clojure:一旦你完成了上述“介绍内容”中的一个,可以用于的快速复习。
练习
- 🔴 4clojure:学习 Clojure 的一个重要部分。完成所有初级、简单和中等难度的练习。挑战难题, 查看其他人的解决方案,并重写你的解决方案。这是 Clojure
基础的一次训练,非常有效。
- 🟩 Exercism
- 🟩 Clojure Koans
- 🟩 火星车:这是一个简单的问题(不仅仅是纯数学/数据处理),让你探索一些领域建模、编写测试等。
深入理解语言
一种语言会影响思考方式。以下视频,尤其是 Rich 的视频非常有力,是Clojure光泛使用用的主要原因。在学习 Clojure 的同时,建议每天观看/阅读这些视频(可能一两个)。
- 🔴 从简洁到容易:这个演讲超越了语言,改变了你对思考的看法。解开那些绳索,分离那些关注点,让你的生活变得简单。
- 🟩 简洁并不容易:作为 Rich 演讲的很好的后续,用具体示例和它如何应用于日常编程。
- 🟨 值(value)的价值(value):可能需要多次观看才能领悟。或者,在你对 Clojure 有了一定了解后再观看。
- 🟨 Clojure 对身份(ID)和状态(state)的处理:不可变数据的世界观.
- 🔴 Clojure的乐趣的第 1、2 章:这是我和我的同事最初学习 Clojure 时使用的资料。如果有人问我要遵循的一本教科书,我会一次又一次推荐它。至少阅读前两章以理解哲学... 其他书籍在这方面普遍不足。
- 🔴 用 Clojure 的方式解决问题:反复看这个视频, 常看常新。
- 🟩 吊床驱动开发:关于睡眠的好建议,以及如何将“思考”作为一种工具。
理念
为什么要以这种方式设计语言?深入了解制作者的思想对于有效使用语言很有帮助。
- 🔴 官方指南中的理念页面:阅读官方所有指南, 写的非常赞。
- 🟨 我们到了吗?:如果来自面向对象编程背景,这是必看内容。
- 🟨 Rich的Clojure的历史(2020):完整的Clojure故事,以及与其他语言演变的有趣比较。
- 🟨 也许还不是(2018年11月):关于选择动态类型语言的讨论,以及一些对Haskell的批评。
书籍或课程
以下图书可以在zlibary下载到
- Clojure的乐趣:非常推荐的书。如果愿意接受稍微陡峭的学习曲线,它会很有效。
- Clojure编程:这是新手们正在阅读的书,听说很不错。作者是绝对的行家。
- Clojure实例:这本书曾在IN/Clojure研讨会上用于一天的初学者速成课程。如果喜欢通过例子学习,强烈考虑这本书。
- Clojure勇者真传:这是一本有趣的书,容易理解。有很好的宏部分。
- 小小的Scheme程序员:虽然不是Clojure,但非常值得一读。
- Eric Normand的课程:这些是付费课程,但如果你想要一个可以在相对短时间内提升技能的完整课程,我会推荐这些。
- Lambda岛的课程:看看关于React/Reagent和测试的章节。它们是免费的!
熟悉编辑器和REPL
- 🟩 Sandy的视频:Sandy在YouTube上制作了一系列关于设置编辑器、使用REPL和调试的优秀教程。我认为它们会为你的成功打下良好的基础。
- 🔴 结构化编辑:编写Lisp不像编写大多数其他语言。你在编辑抽象语法树(AST)。必须使用正确的工具。
- 🔴 Stu的Repl驱动开发演讲:人们说REPL是Clojure最好的特性,所以你必须学会如何有效使用它。这个演讲有所帮助。
- 🟩 Sean Corfield的示范:我听人说这对他们很有启发。Sean从头开始用Clojure构建一个Web应用,使用REPL。
- 🟩 官方指南:多部分教程。
- 🟩 只需搜索“REPL驱动开发”,你会看到除这些之外还有很多视频和教程。
Clojure应用程序编程
当你认真考虑使用Clojure进行工作时,你需要锐化某些技能,并进行打磨。以下是我通常向人们推荐的一些资源:
- 🔴 社区风格指南:正确地格式化你的代码。一旦你写了一些Clojure代码,就整体阅读一遍这个指南,然后在不确定时把它当作参考。
- 🔴 Linting:设置clj kondo,它会帮助你遵守那个风格指南,并在此过程中教你一些Clojure指南。
- 🔴 解构:我看到很多新手错过了良好的解构,这是我通常推荐他们阅读的文章。
- 🔴 Prismatic/Plumatic指南:阅读这三篇文章。每当人们在数据结构决策上遇到困难时,我都会把他们引向这些文章。
- 🟩 Stuart Sierra的做与不做清单:阅读所有这些文章。我经常推荐人们阅读关于命名函数的文章,至少阅读那一篇。
- 🟩 手持剪刀奔跑:Stu的另一个演讲,提醒你使用REPL。
- 🟨 数据 > 函数 > 宏:我希望有更多关于这个主题的资料。它对FP中的设计有很大影响。
错误处理
社区并没有一个公认的答案。你的方法很大程度上取决于你是否喜欢异常。有很多文章和讨论围绕这个话题,但似乎没有什么能总结它。
- 可能值得浏览一些clojureverse中的有趣讨论:1,2,3
- 想要一种单子方法?使用Failjure。但也要阅读相关的博客和文章。
- [进行中] 铁路导向编程
- [进行中] Erlang风格错误元组
- [进行中] 异常及其有效使用
调试
- 🔴 Sandy关于科学调试的视频:一个更易于接近、日常的调试教程。
- 🟨 使用科学方法进行调试:Stu如何使用REPL进行调试。记住:他非常擅长调试。
建模和组织代码
- 🟨 Clojureverse 讨论:这是一个非常详细(且很长)的讨论,包含几种不同的观点。将这些想法浓缩在某处会很好。
- 🟨 函数核心命令式外壳:这是函数式语言中结构化代码的主要方式,Shantanu 在这里很好地阐述了其理由和好处。
- 🟨 如何命名函数:这是一个很棒的文章,我经常推荐给人们。
- 🟨 冗余映射:通常是我重构会议中的首要建议之一。
- 🟨 Clojure 的要素:这是命名事物的宝库。
- 🟨 命名空间组织:这篇文章的基础是坚实的。尽管我可能会在大段代码中使用命名空间。
- 🟩 《Clojure 编程》中的序列部分:这是对在 clojure.core 中用于序列的接口设计的清晰介绍。然而,它也广泛适用于应用程序中的接口/协议设计。
面向从面向对象 (OO) 来的人的函数式编程
基础知识之外
这些不是学习 Clojure 的必需,但它们会打开你的思维,让你了解某些令人惊讶的思维范式。